package chixing.day16.work;

import java.io.*;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;

import java.util.List;

public class test {
    public static void main(String[] args) {
        // 存储正常记录和异常记录的集合
        List<Record> normalRecords = new ArrayList<>();
        List<Record> abnormalRecords = new ArrayList<>();

        // 日期格式器，用于解析交易日期
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");

        // 读取文件并处理记录（使用字节流）
        try (FileInputStream fis = new FileInputStream("D:\\a\\flow.txt")) {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            byte[] buffer = new byte[1024];
            int bytesRead;

            // 读取所有字节到ByteArrayOutputStream
            while ((bytesRead = fis.read(buffer)) != -1) {
                baos.write(buffer, 0, bytesRead);
            }
            // 将字节转换为字符串，指定编码
            String content = new String(baos.toByteArray(), StandardCharsets.UTF_8);

            // 按行分割内容
            String[] lines = content.split("\n");

            // 跳过表头行（从索引1开始处理数据行）
            for (int i = 1; i < lines.length; i++) {
                String line = lines[i].trim(); // 去除可能的空白字符
                if (line.isEmpty()) continue; // 跳过空行

                // 按竖线分割字段
                String[] fields = line.split("\\|");

                try {
                    // 解析各个字段
                    int id = Integer.parseInt(fields[0]);
                    String name = fields[1];
                    int organizationId = Integer.parseInt(fields[2]);

                    // 处理性别：1表示男性'M'，0表示女性'F'
                    char gender = "1".equals(fields[3]) ? 'M' : 'F';

                    long number =  Long.parseLong(fields[4]);
                    String dateStr = fields[5];
                    double amount = Double.parseDouble(fields[6]);

                    // 处理交易日期
                    LocalDateTime transactionDate = null;
                    if (!"null".equals(dateStr)) {
                        transactionDate = LocalDateTime.parse(dateStr, formatter);
                    }

                    // 创建Record对象
                    Record record = new Record(id, name, organizationId, gender, number, transactionDate, amount);

                    // 根据交易日期是否为null，添加到不同的集合
                    if (transactionDate == null) {
                        abnormalRecords.add(record);
                    } else {
                        normalRecords.add(record);
                    }

                } catch (Exception e) {
                    System.err.println("处理记录时出错: " + line);
                    e.printStackTrace();
                }
            }

            // 打印处理结果
            System.out.println("正常记录数: " + normalRecords.size());
            System.out.println("异常记录数(交易日期为null): " + abnormalRecords.size());

            System.out.println("\n正常记录:");
            for (Record record : normalRecords) {
                System.out.println(record);
            }

            System.out.println("\n异常记录:");
            for (Record record : abnormalRecords) {
                System.out.println(record);
            }

        } catch (IOException e) {
            System.err.println("读取文件时发生错误:");
            e.printStackTrace();
        }
    }
}
